#include "Cod_Audio.h"
#include <iostream>
using std::cerr;
using std::endl;

Cod_Audio::Cod_Audio() {
	codec = NULL;
	encoder_Ctx = NULL;
}

void Cod_Audio::register_codecs() {
	av_register_all();   // registrar los codecs en el sistema
}

int Cod_Audio::busca_encoder() {
	codec = avcodec_find_encoder(CODEC_ID_MP2);
	if (!codec) {
		cerr << "Encoder no encontrado" << endl;
		return -1;
	}
	return 0;
}

int Cod_Audio::abre_encoder() {
	if (avcodec_open(encoder_Ctx, codec) < 0) {
		cerr << "No se pudo abrir el encoder" << endl;
		return -1;
	}
	return 0;
}

void Cod_Audio::ini_contexto() {
	encoder_Ctx = avcodec_alloc_context();
	encoder_Ctx->bit_rate = 64000;
	encoder_Ctx->sample_rate = 44100;
	encoder_Ctx->sample_fmt = (AVSampleFormat) 1;
	encoder_Ctx->channels = 2;
}

int Cod_Audio::getFrameSize() {
	return encoder_Ctx->frame_size;
}

int Cod_Audio::codificar(short *samples, int *outbuf_size, uint8_t **outbuf) {
	int size = avcodec_encode_audio(encoder_Ctx, *outbuf, *outbuf_size, samples);
	if(size > 0)
		return size;
	return -1;
}

Cod_Audio::~Cod_Audio() {
    avcodec_close(encoder_Ctx);
    av_free(encoder_Ctx);
}
